home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / awk / strtonum.awk < prev    next >
Text File  |  2005-10-13  |  1KB  |  57 lines

  1. # strtonum --- convert string to number
  2.  
  3. #
  4. # Arnold Robbins, arnold@skeeve.com, Public Domain
  5. # February, 2004
  6.  
  7. function mystrtonum(str,        ret, chars, n, i, k, c)
  8. {
  9.     if (str ~ /^0[0-7]*$/) {
  10.         # octal
  11.         n = length(str)
  12.         ret = 0
  13.         for (i = 1; i <= n; i++) {
  14.             c = substr(str, i, 1)
  15.             if ((k = index("01234567", c)) > 0)
  16.                 k-- # adjust for 1-basing in awk
  17.  
  18.             ret = ret * 8 + k
  19.         }
  20.     } else if (str ~ /^0[xX][0-9a-fA-f]+/) {
  21.         # hexadecimal
  22.         str = substr(str, 3)    # lop off leading 0x
  23.         n = length(str)
  24.         ret = 0
  25.         for (i = 1; i <= n; i++) {
  26.             c = substr(str, i, 1)
  27.             c = tolower(c)
  28.             if ((k = index("0123456789", c)) > 0)
  29.                 k-- # adjust for 1-basing in awk
  30.             else if ((k = index("abcdef", c)) > 0)
  31.                 k += 9
  32.  
  33.             ret = ret * 16 + k
  34.         }
  35.     } else if (str ~ /^[-+]?([0-9]+([.][0-9]*([Ee][0-9]+)?)?|([.][0-9]+([Ee][-+]?[0-9]+)?))$/) {
  36.         # decimal number, possibly floating point
  37.         ret = str + 0
  38.     } else
  39.         ret = "NOT-A-NUMBER"
  40.  
  41.     return ret
  42. }
  43.  
  44. # BEGIN {     # gawk test harness
  45. #     a[1] = "25"
  46. #     a[2] = ".31"
  47. #     a[3] = "0123"
  48. #     a[4] = "0xdeadBEEF"
  49. #     a[5] = "123.45"
  50. #     a[6] = "1.e3"
  51. #     a[7] = "1.32"
  52. #     a[7] = "1.32E2"
  53. #     for (i = 1; i in a; i++)
  54. #         print a[i], strtonum(a[i]), mystrtonum(a[i])
  55. # }
  56.